查看原文
其他

数据治理 | 进阶版Git:使用Git分支特性进行多人协作

快点关注→ 数据Seminar 2023-02-21

目录

一、快速了解“分支”

二、Git 分支的使用

  (一)准备工作

  (二)创建分支

  (三)基于分支开展工作

  (四)项目进度管理

三、总结

本文共3950个字,阅读大约需要10分钟,欢迎指正!

关于Git的往期推文:建议大家按顺序阅读!
  1. 数据治理 | 版本控制神器:GIT—介绍和安装
  2. 数据治理 | 版本控制神器:GIT—个人文档管理
  3. 数据治理 | 一文看懂GIT的基本原理!
  4. 数据治理 | 科研团队协同工作新神器!Git远程仓库的使用
  5. 数据治理 | 团队必备!使用Git进行多人协同工作


上期推文,我们模拟了一个团队协同完成某大学生创新课题项目的场景(传送门:数据治理 | 团队必备!使用Git进行多人协同工作),然后讲解了如何使用 Git 远程仓库进行多人协同工作。我们回顾一下基本的操作步骤:

  1. 项目管理员创建远程仓库,将团队成员加入到项目仓库中。
  2. 团队成员克隆(git clone)远程仓库到本地,开始工作并把成果文档放入仓库( git add / commit )
  3. 团队成员使用 git push 提交最新数据到远程仓库(如果发现无法提交,需要用 git pull 拉取最新数据到本地)
  4. 项目管理员查看提交记录并做出相关指导

本文将介绍 Git 的分支特性,它可以帮助我们更好地进行版本控制和规划项目进度。

Part1快速了解“分支”

我们要是拥有“分身”能力就好了,这些分身继承自主体,又相互独立互不干扰。分身A去学数学,分身B去学语文,分身C去学英语 ……,等到某一天这些分身合并到主体,主体就同时拥有了所有分身的能力。Git的分支特性,就类似于“分身”

在使用Git进行项目管理时,Git默认会创建一个 master 分支,也就是项目的“主体”。上期推文(传送门:数据治理 | 团队必备!使用Git进行多人协同工作)的场景中,只有3个人进行协同,但也发生了小李要提交最新数据到远程仓库却出现报错的问题,原因是小李工作期间,小赵也补充了最新的内容到远程仓库中,Git为了保持数据一致性,要求本地数据和远程仓库数据同步,如果团队人数进一步增加,这个问题将出现得更加频繁。

造成这个问题的主要原因是大家都在项目的“主体”(master 分支)上开工,为了保持项目数据不丢失,不混乱,Git 要求 push 前,先把远程仓库中最新的数据 pull 到本地电脑。可见,大家都在 一个 master 分支上工作会造成一定程度的不便。

Git 支持分支特性,一个分支代表一条独立的工作路线。使用分支意味着你可以从主线上分离开来,然后在不影响主线的同时继续工作。但是,大家工作在不同的分支上,数据相互独立不可见,如何查阅别人的数据呢?这就需要项目管理员对项目进度进行管理,并定期合并分支,让其他分支上的数据合并到 master 分支,然后各分支又可以从master获取最新数据了。

Part2Git 分支的使用

我们延续上期推文(传送门:数据治理 | 团队必备!使用Git进行多人协同工作)的模拟场景:王教授辅导小赵和小李完成某大学生创新课题项目。

(一)准备工作

当我使用分支特性时,需要配合权限管理功能,因此准备工作会比之前仅创建一个远程仓库多几个步骤:

  1. 王教授作为管理员,需要创建一个 “组织单位”(见图1)
  2. 王教授把小赵和小李添加到组织中(见图2)
  3. 王教授在“组织单位”中创建一个远程代码仓库,并设置成员(见图3和图4)
图1:创建组织单位
图2:添加成员
图3:组织单位中创建代码库
图4:设置成员

(二)创建分支

王教授作为管理员负责任务分配,并创建分支让团队成员工作于独立的分支上,下方代码模拟这一流程:

# 将远程仓库克隆到本地
git clone git@github.com:WangTeamTest/teamproject.git

# 进入“仓库”
cd teamproject

# 创建一个说明文档, 并输入内容
touch readme.txt
echo "小赵工作于分支zhao" >> readme.txt
echo "小李工作于分支lee" >> readme.txt

# 提交当前修改,自动创建 master分支( github 中是 main )
# 注:从 2020 年 10 月 1 日开始,GitHub 上的所有新库都将用中性词「main」命名,
# 取代原来的「master」,因为「master」是一个容易让人联想到奴隶制的术语。
git add .
git commit -m "创建了readme.txt"
git push

# 查看本地分支
git branch
# 输出:* main
# * 表示当前工作的分支

# 查看远程仓库分支
git branch -r
# 输出:origin/main
# origin是远程仓库地址的别名,main表示该仓库的主分支

# 基于main分支创建其他分支
# 1) 切换到 main 分支,如果正处于 main 分支,这个步骤可以省略
git switch main
# 2) 创建分支 zhao
git branch zhao
# 3) 查看本地分支
git branch
# 输出如下内容:
    # * main
    #   zhao
# 4)创建分支 lee
git branch lee

# 切换分支,并将新分支提交到远程仓库
git switch zhao
git push --set-upstream origin zhao
git switch lee
git push --set-upstream origin lee

# 查看远程仓库的分支
git branch -r
# 输出如下内容:
#  origin/lee
#  origin/main
#  origin/zhao

对上述代码的补充说明:

  1. 未提交过内容的仓库不具有任何分支,第一次提交后默认创建 master 分支
  2. 创建分支时,需要基于一个特定的分支,可以从 master 分支创建,也可以从非 master 分支创建
  3. 在 master 分支中, 创建了 zhao 分支, 那么 zhao 分支会继承 master 分支中的所有状态

登录 GitHub 远程仓库,可以看到如下图所示的3个分支。

(三)基于分支开展工作

小赵使用分支zhao,下面代码模拟他的工作:

# 将远程仓库克隆到本地
git clone git@github.com:WangTeamTest/teamproject.git

# 进入仓库
cd teamproject

# 切换到分支zhao
git switch zhao

# 模拟小赵的工作
mkdir 文献收集
mkdir 会议记录
mkdir 数据收集
touch 文献收集/文献1.pdf
touch 文献收集/文献2.pdf
touch 会议记录/2023-01-28.txt
touch 会议记录/2023-01-29.txt
touch 数据收集/2020统计数据.csv
touch 数据收集/2021统计数据.csv

# 提交工作
git add .
git commit -m "添加了数据和会议记录等资料"
git push

代码执行后,效果如下:

小李使用分支lee,下面代码模拟他的工作:

# 将远程仓库克隆到本地
git clone git@github.com:WangTeamTest/teamproject.git

# 进入仓库
cd teamproject

# 切换到分支lee
git switch lee

# 小李需要小赵提供的数据
# 下方命令表示把分支zhao的内容,合并到当前的分支lee
git merge origin/zhao

# 小李的工作
mkdir 计量模型
mkdir 论文写作
touch 计量模型/数据处理.py
touch 计量模型/数据统计.do
touch 计量模型/回归模型.do
touch 计量模型/模型检验.do
touch 论文写作/课题论文.docx

# 完成后提交
git add .
git commit -m "添加计量模型和论文初稿"
git push

代码执行后,效果如下:

我们前面提到过分支之间相互独立,下面和上期推文一样,模拟一个场景看看是否会有无法 push 的问题。场景如下:

小李工作期间,小赵增加工作内容并push到远程仓库,小李工作完成并push。

下面代码模拟小赵工作:

# 小赵补充材料
cd teamproject
git switch zhao
touch 数据收集/2019统计数据.csv
touch 数据收集/2022统计数据.csv

# 提交到远程仓库
git add .
git commit -m "材料补充"
git push

效果如下:

下面代码模拟小李工作:

cd teamproject
git switch lee
touch 论文写作/课题论文2.docx

# 提交到远程仓库
git add .
git commit -m "论文补充"
git push

效果如下:

用代码模拟小赵和小李的工作流程,发现上期推文中出现的报错没有出现,使用分支可以有效避免冲突问题。

(四)项目进度管理

王教授可以定期将分支zhao和分支lee的内容合到main分支,检查工作质量,合理安排工作进度。

cd teamproject

# 拉取最新代码
git pull

# 切换到主分支
git switch main

# 将其他分支的内容合并到主分支
git merge origin/zhao
git merge origin/lee

# 提交到远程仓库
git add .
git commit -m "合并内容到main分支"
git push

效果如下:

Part3总结

使用Git的分支特性可有效减少冲突,帮助我们更好地进行版本控制。

我们最后总结一下本期推文中用到的相关Git命令:

命令说明
git branch查看本地分支和当前分支(带 * 号)
git branch -r查看远程仓库分支
git branch 分支名称基于当前分支,创建新分支
git switch 分支名称切换分支
git merge 分支名称将指定分支内容合并到当前分支

希望大家好好练习和使用 Git ,我们下期再见 !




星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!

点击搜索你感兴趣的内容吧

往期推荐


大数据应用 | 大数据给社会学研究带来了什么挑战?

数据治理 | 团队必备!使用Git进行多人协同工作

Python教学 | Python 中的循环结构(上)【附本文代码和数据】

Python教学 | Python 中的分支结构(判断语句)

Python教学 | 组合数据类型 - 字典&元组

Python教学 | 组合数据类型-集合(内含实例)




数据Seminar




这里是大数据、分析技术与学术研究的三叉路口


文 | 《社科领域大数据治理实务手册》


    欢迎扫描👇二维码添加关注    

点击下方“阅读全文”了解更多

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存